"""
文本文件解析器
处理 .txt 和 .md 文件
"""

import logging
from .base_parser import BaseParser

logger = logging.getLogger(__name__)


class TextParser(BaseParser):
    """文本文件解析器"""
    
    def __init__(self):
        super().__init__()
        self.supported_extensions = ['.txt', '.md']
    
    def parse_content(self, content: bytes) -> str:
        """解析文本文件内容"""
        try:
            # 尝试UTF-8编码
            text = content.decode('utf-8')
            logger.debug("使用UTF-8编码解析文本文件")
        except UnicodeDecodeError:
            try:
                # 尝试GBK编码
                text = content.decode('gbk')
                logger.debug("使用GBK编码解析文本文件")
            except UnicodeDecodeError:
                try:
                    # 尝试其他编码
                    text = content.decode('latin-1')
                    logger.debug("使用Latin-1编码解析文本文件")
                except UnicodeDecodeError:
                    logger.error("无法解析文本文件编码")
                    return "文本文件编码解析失败"
        
        # 清理文本
        cleaned_text = self.clean_text(text)
        
        if not cleaned_text.strip():
            return "文本文件内容为空"
        
        # 提取有意义的内容
        meaningful_content = self.extract_meaningful_content(cleaned_text)
        
        return meaningful_content if meaningful_content.strip() else "文本文件功能测试需求"

    def parse_markdown(self, content: bytes) -> str:
        """解析Markdown文件"""
        text = self.parse_content(content)
        
        # 简单的Markdown处理
        # 移除Markdown标记但保留结构
        import re
        
        # 移除代码块
        text = re.sub(r'```[\s\S]*?```', '', text)
        text = re.sub(r'`[^`]*`', '', text)
        
        # 移除链接但保留文本
        text = re.sub(r'\[([^\]]*)\]\([^\)]*\)', r'\1', text)
        
        # 移除图片
        text = re.sub(r'!\[([^\]]*)\]\([^\)]*\)', '', text)
        
        # 移除标题标记但保留文本
        text = re.sub(r'^#{1,6}\s*', '', text, flags=re.MULTILINE)
        
        # 移除强调标记
        text = re.sub(r'\*\*([^\*]*)\*\*', r'\1', text)
        text = re.sub(r'\*([^\*]*)\*', r'\1', text)
        text = re.sub(r'__([^_]*)__', r'\1', text)
        text = re.sub(r'_([^_]*)_', r'\1', text)
        
        # 处理列表
        text = re.sub(r'^\s*[-\*\+]\s*', '• ', text, flags=re.MULTILINE)
        text = re.sub(r'^\s*\d+\.\s*', '', text, flags=re.MULTILINE)
        
        return self.clean_text(text)
